<template>
	<div id="app">
		<router-view v-if="ready" />
	</div>
</template>

<script>
	
	var vm;
	export default {
		name: 'App',
		data : function() {
			return {
				dictOk : false,
				dataOk : false,
			}
		},
		computed : {
			ready : function() {
				return this.dictOk && this.dataOk;
			}
		},
		methods : {
			initDict : function() {
				//获取数据字典
				api.dictAll({}).then(function(data) {
					var dict = {};
		            data.list.forEach(function(item) {
		              //根据字典key值保存对应数组
		              var key = item.dicKey;
		              if (!dict[key]) {
		                dict[key] = [];
		              }
		              dict[key].push({
		                name: item.name,
		                value: item.dicValue
		              });
		            });
		            //保存到store
		            vm.$store.commit("setDict",dict);
		            
		           	vm.dictOk = true;
		            //当前页面没要求token
		            if($route.meta.hasToken == null) {
						vm.dataOk = true;
					}
				}).catch(function(errorCode) {
					//发生错误
					vm.dictOk = true;
				});
			},
			initData : function() {
//				debugger
				//token是否携带会话Id
				var withSession = true;
				var token = tool.getItem(lsKey.token, true);
				//没有token,或者有token但没有会话Id
				if(!token || !token[1]) {
					vm.loadData();
					withSession = false;
				}
				
				//获取sessionId
				var sessionId = sessionStorage.getItem(ssKey.sessionId);
				//存在则直接处理
				if(sessionId) {
					sessionOk();
					return;
				}
				//不存在,则发送消息到同一会话其他窗口请求sessionId
				tool.setItem(lsKey.message, "getSessionId:" + tool.uuid());
				//定时循环检验是否接受到消息
				let i = 1;
				let timer = setInterval(function(){
					sessionId = sessionStorage.getItem(ssKey.sessionId);
					if(i>=10 && !sessionId) {
						sessionId = tool.uuid();
						sessionStorage.setItem(ssKey.sessionId, sessionId)
					}
					if(sessionId != null) {
						sessionOk();
						clearInterval(timer);
					}
					i++;
				},60);
				
				
				function sessionOk() {
					//token不带会话Id,不处理
					if(!withSession) {
						return;
					}
					if(sessionId != token[1]) {
						tool.removeItem(lsKey.token);
					}
					vm.loadData();
				}
			},
			loadData : function() {
				//要跳回的初始路由
//				var target = { path : $route.path, query : $route.query };

				var hasToken = $route.meta.hasToken;
				var token = tool.getItem(lsKey.token, true);
				
				//没有token
				if(!token) {
					if(hasToken == true) {
						router.push({
							name:"登录",
							params: {fromPath : $route.path}
						});
					}
					vm.dataOk = true;
					return;
				}
				
				api.studentUserInfo().then(function(data) {
					//保存到store
					vm.$store.commit("setUser", data.info);
					
					if(hasToken == false) {
						router.push("/");
					}
					vm.dataOk = true;
					
				}).catch(function(errorCode) {
					//token过期: 接口拦截器处理跳转
					vm.dataOk = true;
				});
			},
			initMessage : function() {
				//localstorage变化事件监听处理
				window.addEventListener("storage", function(e) {
					//不是专门的消息,不处理
					if(tool.decode(e.key) != lsKey.message) {
						return;	
					}
					//解析消息
					var msg = tool.decode(e.newValue).split(":");
					var type = msg[0];
					var value = msg[1];
					
					if(type == "getSessionId") {
						//获取会话Id,发送消息进行反馈
						let sessionId = sessionStorage.getItem(ssKey.sessionId);
						tool.setItem(lsKey.message, "sessionId:" + sessionId);
					}
					if(type == "sessionId") {
						//接收会话Id,保存进会话
						sessionStorage.setItem(ssKey.sessionId, value);
					}
					
				})
			}
		},
		created: function() {
			vm = this;
			//如果是手机打开,则跳转到手机页面
			if(navigator.userAgent.match("Mobile") && config.skipUrl) {
				location.href = config.skipUrl;
				return;
			}
			//项目初始化
			tool.init();
			
			//初始化消息监听器
			vm.initMessage();
			
			//初始化数字字典和数据
			vm.initDict();
			vm.initData();
			
			tool.message = this.$message;
			tool.alert = this.$alert;
			tool.confirm = this.$confirm;
			tool.prompt = this.$prompt;
			tool.msgbox = this.$msgbox;
			tool.notify = this.$notify;
			tool.loading = this.$loading;

			//判断内核,如果不是webkit内核,进行提示
			var agent = navigator.userAgent.toLowerCase();
			if(agent.indexOf("webkit") < 0) {
				tool.notify({
					title: '兼容性提示',
					message: '请使用谷歌浏览器，或开启双核浏览器的极速模式。 (当前浏览器或模式可能会导致页面不兼容)',
					type: 'warning',
					duration: 0
				})
			}
		}
	}
</script>

<style lang="scss" src="./style/element_cover.css"></style>
